/*
 * @Descripttion: 
 * @version: 
 * @Author: lily
 * @Date: 2021-03-30 10:00:17
 * @LastEditors: lily
 * @LastEditTime: 2021-04-15 11:11:33
 */
/*
 * @lc app=leetcode.cn id=11 lang=javascript
 *
 * [11] 盛最多水的容器
 */

// @lc code=start
/**
 * @param {number[]} height
 * @return {number}
 */

//  思路：双指针法
//  设置双指针分别位于容器壁两端，比较指针所指数值大小进行指针的移动
//  每次更新面积最大值，直到双指针相遇，最后返回最大值。

//  复杂度：O(n)  O(1)

var maxArea = function (height) {
    let area = 0, start = 0, end = height.length - 1
    while (start !== end) {
        // 保存面积最大值
        area = Math.max(area, Math.min(height[start], height[end]) * (end - start))
        // 根据比较规则 移动指针
        if (height[start] < height[end]) {
            start++
        } else {
            end--
        }
    }
    return area



    // 暴力 超时
    // let area = 0
    // for (let head = 0; head < height.length; head++) {
    //     for (let tail = head + 1; tail < height.length; tail++) {
    //         area = Math.max(area, Math.min(height[head], height[tail]) * (tail - head))
    //     }
    // }
    // return area
};
// @lc code=end

console.log(maxArea([4, 3, 2, 1, 4]));